#ツールチップ
#ツールチップの構成
名前空間:options.plugins.tooltip
、グラフのツールチップのグローバル オプションは次のように定義されています。Chart.defaults.plugins.tooltip
。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
enabled | boolean | true | キャンバス上のツールチップは有効になっていますか? |
external | function | null | 見る外部ツールチップセクション。 |
mode | string | interaction.mode | ツールチップに表示される要素を設定します。もっと...。 |
intersect | boolean | interaction.intersect | true の場合、ツールチップ モードはマウスの位置が要素と交差する場合にのみ適用されます。 false の場合、モードは常に適用されます。 |
position | string | 888b362b-72a3-47f7-ad9e-924dec7f306f | ツールチップを配置するためのモード。もっと... |
callbacks | object | を参照してください。コールバックセクション。 | |
itemSort | function | ツールチップ項目を並べ替えます。もっと... | |
filter | function | ツールチップ項目をフィルターします。もっと... | |
backgroundColor | Color | 'rgba(0, 0, 0, 0.8)' | ツールチップの背景色。 |
titleColor | Color | '#fff' | タイトルのテキストの色。 |
titleFont | Font | {weight: 'bold'} | 見るフォント。 |
titleAlign | string | 'left' | タイトルテキスト行の水平方向の配置。もっと... |
titleSpacing | number | 2 | 各タイトル行の上下に追加するスペース。 |
titleMarginBottom | number | 6 | タイトルセクションの下部に追加するマージン。 |
bodyColor | Color | '#fff' | 本文の色。 |
bodyFont | Font | {} | 見るフォント。 |
bodyAlign | string | 'left' | 本文テキスト行の水平方向の配置。もっと... |
bodySpacing | number | 2 | 各ツールチップ項目の上部と下部に追加する間隔。 |
footerColor | Color | '#fff' | フッターテキストの色。 |
footerFont | Font | {weight: 'bold'} | 見るフォント。 |
footerAlign | string | 'left' | フッターテキスト行の水平方向の配置。もっと... |
footerSpacing | number | 2 | 各フッター行の上部と下部に追加するスペース。 |
footerMarginTop | number | 6 | フッターを描画する前に追加するマージン。 |
padding | Padding | 6 | ツールチップ内のパディング。 |
caretPadding | number | 2 | ツールチップの矢印の端をツールチップの点から遠ざけるための追加の距離。 |
caretSize | number | 5 | ツールチップの矢印のサイズ (ピクセル単位)。 |
cornerRadius | number |object | 6 | ツールチップのコーナーカーブの半径。 |
multiKeyBackground | Color | '#fff' | ツールチップに複数の項目がある場合に、色付きボックスの後ろに描画する色。 |
displayColors | boolean | true | true の場合、ツールチップにカラー ボックスが表示されます。 |
boxWidth | number | bodyFont.size | displayColors が true の場合のカラー ボックスの幅。 |
boxHeight | number | bodyFont.size | displayColors が true の場合のカラー ボックスの高さ。 |
boxPadding | number | 1 | カラーボックスとテキストの間のパディング。 |
usePointStyle | boolean | false | カラー ボックスの代わりに、対応するポイント スタイル (データセット オプションから) を使用します (例: 星、三角形など) (サイズは boxWidth と boxHeight の間の最小値に基づきます)。 |
borderColor | Color | 'rgba(0, 0, 0, 0)' | 境界線の色。 |
borderWidth | number | 0 | 境界線のサイズ。 |
rtl | boolean | true ツールチップを右から左にレンダリングします。 | |
textDirection | string | キャンバスのデフォルト | これによりテキストの方向が強制されます'rtl' また'ltr' キャンバス上で指定された CSS に関係なく、ツールチップをレンダリングするためにキャンバス上で |
xAlign | string | undefined | ツールチップ キャレットの X 方向の位置。もっと |
yAlign | string | undefined | Y 方向のツールチップ キャレットの位置。もっと |
ノート
さらに視覚的なカスタマイズが必要な場合は、HTML ツールチップ。
#位置モード
可能なモードは次のとおりです。
'average'
'nearest'
'average'
モードでは、ツールチップに表示される項目の平均的な位置にツールチップが配置されます。'nearest'
イベント位置に最も近い要素の位置にツールチップを配置します。
定義することもできますカスタム位置モード。
#ツールチップの配置
のxAlign
とyAlign
オプションはツールチップ キャレットの位置を定義します。これらのパラメータが設定されていない場合、最適なキャレット位置が決定されます。
次の値は、xAlign
設定がサポートされています。
'left'
'center'
'right'
次の値は、yAlign
設定がサポートされています。
'top'
'center'
'bottom'
#テキストの配置
のtitleAlign
、bodyAlign
とfooterAlign
オプションは、ツールヒント ボックスに対するテキスト行の水平位置を定義します。次の値がサポートされています。
'left'
(デフォルト)'right'
'center'
これらのオプションはテキスト行にのみ適用されます。カラー ボックスは常に左端に揃えられます。
#ソートコールバック
の並べ替えを可能にしますツールチップ項目。少なくとも渡すことができる関数を実装する必要があります配列.プロトタイプ.ソート (新しいウィンドウが開きます)。この関数は、チャートに渡されるデータ オブジェクトである 3 番目のパラメーターも受け入れることができます。
#フィルターコールバック
フィルタリングを許可しますツールチップ項目。少なくとも渡すことができる関数を実装する必要があります配列.プロトタイプ.フィルター (新しいウィンドウが開きます)。この関数は、チャートに渡されるデータ オブジェクトである 4 番目のパラメーターも受け入れることができます。
#ツールチップのコールバック
名前空間:options.plugins.tooltip.callbacks
、ツールチップにはテキストを提供するための次のコールバックがあります。すべての機能について、this
から作成されたツールチップ オブジェクトになります。Tooltip
コンストラクタ。コールバックが返された場合undefined
の場合、デフォルトのコールバックが使用されます。ツールチップから項目を削除するには、コールバックは空の文字列を返す必要があります。
名前空間:data.datasets[].tooltip.callbacks
、マークが付いている項目Yes
コラムの中でDataset override
データセットごとにオーバーライドできます。
あツールチップ項目のコンテキストツールヒントに表示される項目ごとに生成されます。これは、コールバック メソッドが対話する主要なモデルです。テキストを返す関数の場合、文字列の配列は複数行のテキストとして扱われます。
名前 | 引数 | 戻り値の型 | データセットの上書き | 説明 |
---|---|---|---|---|
beforeTitle | TooltipItem[] | string | string[] | undefined | タイトルの前にレンダリングするテキストを返します。 | |
title | TooltipItem[] | string | string[] | undefined | ツールヒントのタイトルとしてレンダリングするテキストを返します。 | |
afterTitle | TooltipItem[] | string | string[] | undefined | タイトルの後に表示するテキストを返します。 | |
beforeBody | TooltipItem[] | string | string[] | undefined | 本文セクションの前にレンダリングするテキストを返します。 | |
beforeLabel | TooltipItem | string | string[] | undefined | はい | 個々のラベルの前にレンダリングするテキストを返します。これは、ツールチップの項目ごとに呼び出されます。 |
label | TooltipItem | string | string[] | undefined | はい | ツールチップ内の個々の項目に対してレンダリングするテキストを返します。もっと... |
labelColor | TooltipItem | object | undefined | はい | ツールチップ項目をレンダリングする色を返します。もっと... |
labelTextColor | TooltipItem | Color | undefined | はい | ツールチップ項目のラベルのテキストの色を返します。 |
labelPointStyle | TooltipItem | object | undefined | はい | usePointStyle が true の場合、カラー ボックスの代わりに使用するポイント スタイルを返します(値を持つオブジェクト)pointStyle とrotation )。デフォルトの実装では、データセット ポイントのポイント スタイルが使用されます。もっと... |
afterLabel | TooltipItem | string | string[] | undefined | はい | 個々のラベルの後にレンダリングするテキストを返します。 |
afterBody | TooltipItem[] | string | string[] | undefined | 本体セクションの後にレンダリングするテキストを返します。 | |
beforeFooter | TooltipItem[] | string | string[] | undefined | フッターセクションの前にレンダリングするテキストを返します。 | |
footer | TooltipItem[] | string | string[] | undefined | ツールヒントのフッターとしてレンダリングするテキストを返します。 | |
afterFooter | TooltipItem[] | string | string[] | undefined | フッターセクションの後にレンダリングするテキスト。 |
#ラベルコールバック
のlabel
コールバックは、特定のデータ ポイントに対して表示されるテキストを変更できます。ユニットを示す一般的な例。以下の例では、'$'
すべての行の前に。
const chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
plugins: {
tooltip: {
callbacks: {
label: function(context) {
let label = context.dataset.label || '';
if (label) {
label += ': ';
}
if (context.parsed.y !== null) {
label += new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(context.parsed.y);
}
return label;
}
}
}
}
}
});
#ラベルの色のコールバック
たとえば、ツールチップ内の各項目の境界半径を持つ青い破線の境界線を持つ赤いボックスを返すには、次のようにします。
const chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
plugins: {
tooltip: {
callbacks: {
labelColor: function(context) {
return {
borderColor: 'rgb(0, 0, 255)',
backgroundColor: 'rgb(255, 0, 0)',
borderWidth: 2,
borderDash: [2, 2],
borderRadius: 2,
};
},
labelTextColor: function(context) {
return '#543453';
}
}
}
}
}
});
#ラベル ポイント スタイル コールバック
たとえば、ツールヒントの各項目に通常のカラー ボックスの代わりに三角形を描画するには、次のようにします。
const chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
plugins: {
tooltip: {
usePointStyle: true,
callbacks: {
labelPointStyle: function(context) {
return {
pointStyle: 'triangle',
rotation: 0
};
}
}
}
}
}
});
#ツールチップ項目のコンテキスト
ツールチップ コールバックに渡されるツールチップ項目は、次のインターフェイスを実装します。
{
// The chart the tooltip is being shown on
chart: Chart
// Label for the tooltip
label: string,
// Parsed data values for the given `dataIndex` and `datasetIndex`
parsed: object,
// Raw data values for the given `dataIndex` and `datasetIndex`
raw: object,
// Formatted value for the tooltip
formattedValue: string,
// The dataset the item comes from
dataset: object
// Index of the dataset the item comes from
datasetIndex: number,
// Index of this data item in the dataset
dataIndex: number,
// The chart element (point, arc, bar, etc.) for this tooltip item
element: Element,
}
#外部 (カスタム) ツールチップ
外部ツールチップを使用すると、ツールチップのレンダリング プロセスにフックできるため、独自のカスタム方法でツールチップをレンダリングできます。通常、これはキャンバス上のツールチップではなく HTML ツールチップを作成するために使用されます。のexternal
オプションは、chart
とtooltip
。次のように、グローバルまたはチャート設定で外部ツールチップを有効にすることができます。
const myPieChart = new Chart(ctx, {
type: 'pie',
data: data,
options: {
plugins: {
tooltip: {
// Disable the on-canvas tooltip
enabled: false,
external: function(context) {
// Tooltip Element
let tooltipEl = document.getElementById('chartjs-tooltip');
// Create element on first render
if (!tooltipEl) {
tooltipEl = document.createElement('div');
tooltipEl.id = 'chartjs-tooltip';
tooltipEl.innerHTML = '<table></table>';
document.body.appendChild(tooltipEl);
}
// Hide if no tooltip
const tooltipModel = context.tooltip;
if (tooltipModel.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
}
// Set caret Position
tooltipEl.classList.remove('above', 'below', 'no-transform');
if (tooltipModel.yAlign) {
tooltipEl.classList.add(tooltipModel.yAlign);
} else {
tooltipEl.classList.add('no-transform');
}
function getBody(bodyItem) {
return bodyItem.lines;
}
// Set Text
if (tooltipModel.body) {
const titleLines = tooltipModel.title || [];
const bodyLines = tooltipModel.body.map(getBody);
let innerHtml = '<thead>';
titleLines.forEach(function(title) {
innerHtml += '<tr><th>' + title + '</th></tr>';
});
innerHtml += '</thead><tbody>';
bodyLines.forEach(function(body, i) {
const colors = tooltipModel.labelColors[i];
let style = 'background:' + colors.backgroundColor;
style += '; border-color:' + colors.borderColor;
style += '; border-width: 2px';
const span = '<span style="' + style + '">' + body + '</span>';
innerHtml += '<tr><td>' + span + '</td></tr>';
});
innerHtml += '</tbody>';
let tableRoot = tooltipEl.querySelector('table');
tableRoot.innerHTML = innerHtml;
}
const position = context.chart.canvas.getBoundingClientRect();
const bodyFont = Chart.helpers.toFont(tooltipModel.options.bodyFont);
// Display, position, and set styles for font
tooltipEl.style.opacity = 1;
tooltipEl.style.position = 'absolute';
tooltipEl.style.left = position.left + window.pageXOffset + tooltipModel.caretX + 'px';
tooltipEl.style.top = position.top + window.pageYOffset + tooltipModel.caretY + 'px';
tooltipEl.style.font = bodyFont.string;
tooltipEl.style.padding = tooltipModel.padding + 'px ' + tooltipModel.padding + 'px';
tooltipEl.style.pointerEvents = 'none';
}
}
}
}
});
見るサンプル外部ツールチップの使用を開始する方法の例については、こちらを参照してください。
#ツールチップモデル
ツールチップ モデルには、ツールチップのレンダリングに使用できるパラメータが含まれています。
{
chart: Chart,
// The items that we are rendering in the tooltip. See Tooltip Item Interface section
dataPoints: TooltipItem[],
// Positioning
xAlign: string,
yAlign: string,
// X and Y properties are the top left of the tooltip
x: number,
y: number,
width: number,
height: number,
// Where the tooltip points to
caretX: number,
caretY: number,
// Body
// The body lines that need to be rendered
// Each object contains 3 parameters
// before: string[] // lines of text before the line with the color square
// lines: string[], // lines of text to render as the main item with color square
// after: string[], // lines of text to render after the main lines
body: object[],
// lines of text that appear after the title but before the body
beforeBody: string[],
// line of text that appear after the body and before the footer
afterBody: string[],
// Title
// lines of text that form the title
title: string[],
// Footer
// lines of text that form the footer
footer: string[],
// style to render for each item in body[]. This is the style of the squares in the tooltip
labelColors: TooltipLabelStyle[],
labelTextColors: Color[],
labelPointStyles: { pointStyle: PointStyle; rotation: number }[],
// 0 opacity is a hidden tooltip
opacity: number,
// tooltip options
options: Object
}
#カスタム位置モード
新しいモードは、関数を追加することで定義できます。Chart.Tooltip.positioners
地図。
例:
import { Tooltip } from 'chart.js';
/**
* Custom positioner
* @function Tooltip.positioners.myCustomPositioner
* @param elements {Chart.Element[]} the tooltip elements
* @param eventPosition {Point} the position of the event in canvas coordinates
* @returns {TooltipPosition} the tooltip position
*/
Tooltip.positioners.myCustomPositioner = function(elements, eventPosition) {
// A reference to the tooltip model
const tooltip = this;
/* ... */
return {
x: 0,
y: 0
// You may also include xAlign and yAlign to override those tooltip options.
};
};
// Then, to use it...
new Chart.js(ctx, {
data,
options: {
plugins: {
tooltip: {
position: 'myCustomPositioner'
}
}
}
})
見るサンプルより詳細な例については、
TypeScript を使用している場合は、新しいモードを登録する必要もあります。
declare module 'chart.js' {
interface TooltipPositionerMap {
myCustomPositioner: TooltipPositionerFunction<ChartType>;
}
}